package service

import (
	"context"
	"monitoring-api/models"
	"monitoring-api/serializer"
)

// UploadErrService 管理上传错误信息服务
type UploadErrService struct {
	Kind    int64  `json:"kind,omitempty" form:"kind"` // 报告分类，0表示异常报告
	Message string `json:"message" form:"message"`     // 异常信息，异常对象提示信息
	Stack   string `json:"stack" form:"stack"`         // 触发错误的方式，异常对象的stack字段(需要处理)
	Time    int64  `json:"time" form:"time"`           // 异常发生的时间，时间戳
	Type    int64  `json:"type" form:"type"`           // 异常类型，0-3表示JS/资源/请求/白屏异常
	URL     string `json:"url" form:"url"`             // 页面地址，不带?后面的get参数
	WebID   int64  `json:"web_id" form:"web_id"`       // 网站id，由使用者调用脚本函数传递
}

// Upload 上传错误信息服务
func (service *UploadErrService) Upload() serializer.Response {
	//初始化一个完整结构体
	Err := models.Error{
		WebID:   service.WebID,
		Kind:    service.Kind,
		Message: service.Message,
		Stack:   service.Stack,
		Time:    service.Time,
		Type:    service.Type,
		URL:     service.URL,
	}
	// 添加进MongoDB
	collection := models.Mongo.Collection("errors")
	_, err := collection.InsertOne(context.TODO(), Err)
	if err != nil {
		return serializer.Response{
			Code:    500,
			Message: "上报异常信息失败!",
			Error:   err.Error(),
		}
	}
	return serializer.Response{
		Code:    0,
		Message: "上报异常信息成功!",
	}
}
